package cn.iocoder.yudao.module.erp.controller.admin.stock.vo.check;

import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockCheckItemDO;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.module.erp.enums.DictTypeConstants.AUDIT_STATUS;

@Schema(description = "管理后台 - ERP 其它出库单新增/修改 Request VO")
@Data
public class ErpStockCheckSaveReqVO {

    @Schema(description = "仓库等级（1一级库，2二级库）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "仓库等级（1一级库，2二级库）不能为空")
    private Integer warehouseLevel;

    @Schema(description = "流程实例的编号", example = "1614")
    private String processInstanceId;

    @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11756")
    private Long deptId;

    @Schema(description = "出库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11756")
    private Long id;

    @Schema(description = "出库时间", requiredMode = Schema.RequiredMode.REQUIRED)
//    @NotNull(message = "出库时间不能为空")
    private LocalDateTime createTime;

    @Schema(description = "备注", example = "随便")
    private String remark;

    @Schema(description = "附件 URL", example = "https://www.iocoder.cn/1.doc")
    private String fileUrl;

    @Schema(description = "出库项列表", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "出库项列表不能为空")
    @Valid
    private List<ErpStockCheckItemDO> items;

    @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}")
    private Map<String, List<Long>> startUserSelectAssignees;

    /**
     * taskId
     */
    private String taskId;
//    private List<Item> items;

//    @Data
//    public static class Item {
//
//        @Schema(description = "出库项编号", example = "11756")
//        private Long id;
//
//        @Schema(description = "调拨编号", example = "11756")
//        private Long checkId;
//
//        @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113")
//        @NotNull(message = "仓库编号不能为空")
//        private Long deptId;
//
//        @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113")
//        @NotNull(message = "产品编号不能为空")
//        private Long productId;
//
//        @Schema(description = "产品单价", example = "100.00")
//        private BigDecimal productPrice;
//
//        @Schema(description = "账面数量（当前库存）", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
//        @NotNull(message = "账面数量不能为空")
//        private BigDecimal stockCount;
//
//        @Schema(description = "实际数量（实际库存）", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
//        @NotNull(message = "实际数量不能为空")
//        private BigDecimal actualCount;
//
//
//
////        @Schema(description = "盈亏数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
////        @NotNull(message = "盈亏数量不能为空")
////        private BigDecimal count;
//
//        @Schema(description = "溢损数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
//        @NotNull(message = "溢损数量不能为空")
//        private BigDecimal count;
//
//        @Schema(description = "备注", example = "随便")
//        private String remark;
//
//        @Schema(description = "溢损类型", example = "1")
//        private String addDelType;
//
//        @Schema(description = "批次")
//        private String productBatch;
//
//        @Schema(description = "有效期", requiredMode = Schema.RequiredMode.REQUIRED)
//        @ExcelProperty("有效期")
//        private LocalDateTime productValidityDate;
//        // ========== 关联字段 ==========
//
//        @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "巧克力")
//        private String productName;
//        @Schema(description = "产品条码", requiredMode = Schema.RequiredMode.REQUIRED, example = "A9985")
//        private String productBarCode;
//        @Schema(description = "产品单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "盒")
//        private String productUnitName;
//
//    }

    @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6223")
    @ExcelProperty("仓库编号")
    private Long warehouseId;

}